home *** CD-ROM | disk | FTP | other *** search
/ Assembly Language Step by Step / Assembly Language Step by Step.mdf / ForDOS / ASM / VIDLIB.ASM < prev    next >
Assembly Source File  |  1999-09-12  |  6KB  |  161 lines

  1. ;  Source name     : VIDLIB.ASM
  2. ;  Compiled name   : VIDLIB.OBJ
  3. ;  Code model:     : Real mode segmented model
  4. ;  Version         : 1.0
  5. ;  Created date    : 9/12/1999
  6. ;  Last update     : 9/12/1999
  7. ;  Author          : Jeff Duntemann
  8. ;  Description     : A simple example of a separately assembled module
  9. ;                    containing utility procedures for controlling the
  10. ;                    PC display. Assembled using NASM 0.98.  DOS programs
  11. ;                    can link to these routines by declaring them EXTERN
  12. ;                    and then linking the program .OBJ to VIDLIB.OBJ using
  13. ;                    a linker like ALINK.
  14.  
  15.  
  16. [BITS 16]                    ; Set 16 bit code generation
  17.  
  18. ;----------------------------|
  19. ;     BEGIN DATA SEGMENT     |
  20. ;----------------------------|
  21.            SEGMENT data PUBLIC
  22.  
  23. ;Note that the following items are defined externally to this module, and
  24. ;  for certain routines in this module to function these data items must
  25. ;  be linked in from a properly assembled external module.
  26.  
  27.            EXTERN  CRLF,LRXY
  28.  
  29. ;----------------------------|
  30. ;     BEGIN CODE SEGMENT     |
  31. ;----------------------------|
  32.  
  33.            SEGMENT code PUBLIC  ; This segment may be accessed externally
  34.  
  35. ; Note that the following items are GLOBAL, and may be accessed by
  36. ;   external files that declare them EXTERN.
  37.  
  38.            GLOBAL GotoXY,ClrScr,ClrWin,ScrlWin,VIDEO6
  39.            GLOBAL Write,Writeln
  40.  
  41.  
  42. ;---------------------------------------------------------------
  43. ;   GOTOXY    --  Positions the hardware cursor to X,Y
  44. ;   Last update 9/12/99
  45. ;
  46. ;   1 entry point:
  47. ;
  48. ;   GotoXY:
  49. ;      Caller must pass:
  50. ;      DL: X value     These are both 0-based; i.e., they
  51. ;      DH: Y value       assume a screen 24 by 79, not 25 by 80
  52. ;      Action:  Moves the hardware cursor to the X,Y position
  53. ;               loaded into DL and H.
  54. ;---------------------------------------------------------------
  55. GotoXY:
  56.            mov AH,02H        ; Select VIDEO service 2: Position cursor
  57.            mov BH,0          ; Stay with display page 0
  58.            int 10H           ; Call VIDEO
  59.            ret               ; Return to the caller
  60.  
  61. ;---------------------------------------------------------------
  62. ;   CLRSCR    --  Clears or scrolls screens or windows
  63. ;   Last update 9/12/99
  64. ;
  65. ;   4 entry points:
  66. ;
  67. ;   ClrScr:
  68. ;      No values expected from caller
  69. ;      Action:  Clears the entire screen to blanks with 07H as
  70. ;               the display attribute
  71. ;
  72. ;   ClrWin:
  73. ;      Caller must pass:
  74. ;      CH: Y coordinate, upper left corner of window
  75. ;      CL: X coordinate, upper left corner of window
  76. ;      DH: Y coordinate, lower right corner of window
  77. ;      DL: X coordinate, lower right corner of window
  78. ;      Action:  Clears the window specified by the caller to
  79. ;               blanks with 07H as the display attribute
  80. ;
  81. ;   ScrlWin:
  82. ;      Caller must pass:
  83. ;      CH: Y coordinate, upper left corner of window
  84. ;      CL: X coordinate, upper left corner of window
  85. ;      DH: Y coordinate, lower right corner of window
  86. ;      DL: X coordinate, lower right corner of window
  87. ;      AL: number of lines to scroll window by (0 clears it)
  88. ;      Action:  Scrolls the window specified by the caller by
  89. ;               the number of lines passed in AL.  The blank
  90. ;               lines inserted at screen bottom are cleared
  91. ;               to blanks with 07H as the display attribute
  92. ;
  93. ;   VIDEO6:
  94. ;      Caller must pass:
  95. ;      CH: Y coordinate, upper left corner of window
  96. ;      CL: X coordinate, upper left corner of window
  97. ;      DH: Y coordinate, lower right corner of window
  98. ;      DL: X coordinate, lower right corner of window
  99. ;      AL: number of lines to scroll window by (0 clears it)
  100. ;      BH: display attribute for blanked lines (07H is "normal")
  101. ;      Action:  Generic access to BIOS VIDEO service 6.  Caller
  102. ;               must pass ALL register parameters as shown above
  103. ;---------------------------------------------------------------
  104.  
  105. ClrScr:
  106.            mov CX,0            ; Upper left corner of full screen
  107.            mov DX,word [LRXY]  ; Load lower-right XY coordinates into DX
  108. ClrWin:    mov AL,0            ; 0 specifies clear entire region
  109. ScrlWin:   mov BH,07H          ; Specify "normal" attribute for blanked line(s)
  110. VIDEO6:    mov AH,06H          ; Select VIDEO service 6: Initialize/Scroll
  111.            int 10H             ; Call VIDEO
  112.            ret                 ; Return to the caller
  113.  
  114.  
  115. ;---------------------------------------------------------------
  116. ;   WRITE    --  Displays information to the screen via DOS
  117. ;                service 9: Print String
  118. ;   Last update 9/12/99
  119. ;
  120. ;   1 entry point:
  121. ;
  122. ;   Write:
  123. ;      Caller must pass:
  124. ;      DS: The segment of the string to be displayed
  125. ;      DX: The offset of the string to be displayed
  126. ;          String must be terminated by "$"
  127. ;      Action:  Displays the string at DS:DX up to the "$" marker
  128. ;---------------------------------------------------------------
  129.  
  130. Write:
  131.            mov AH,09H        ; Select DOS service 9: Print String
  132.            int 21H           ; Call DOS
  133.            ret               ; Return to the caller
  134.  
  135.  
  136. ;---------------------------------------------------------------
  137. ;   WRITELN  --  Displays information to the screen via DOS
  138. ;                service 9 and issues a newline
  139. ;   Last update 9/12/99
  140. ;
  141. ;   1 entry point:
  142. ;
  143. ;   Writeln:
  144. ;      Caller must pass:
  145. ;      DS: The segment of the string to be displayed
  146. ;      DX: The offset of the string to be displayed
  147. ;          String must be terminated by "$"
  148. ;      Action:  Displays the string at DS:DX up to the "$" marker
  149. ;               marker, then issues a newline.  Hardware cursor
  150. ;               will move to the left margin of the following
  151. ;               line.  If the display is to the bottom screen
  152. ;               line, the screen will scroll.
  153. ;      Calls: Write
  154. ;---------------------------------------------------------------
  155.  
  156. Writeln:
  157.            call Write      ; Display the string proper through Write
  158.            mov  DX,CRLF    ; Load address of newline string to DS:DX
  159.            call Write      ; Display the newline string through Write
  160.            ret             ; Return to the caller
  161.